package com.example.web.controller;

import cn.hutool.crypto.SecureUtil;
import cn.hutool.jwt.JWT;
import com.example.admin.service.AdminService;
import com.example.xo.common.Result;
import com.example.xo.pojo.Admin;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author 王同学
 */
@RestController
@Slf4j
@RequestMapping("admin")
public class AdminController {
    @Autowired
  private AdminService adminService;

        //签名token  这个要基于hutool工具 需要先去导包
        @PostMapping ("login")
        public Result login(@RequestBody Admin admin){
            // TODO: 2022/11/4 这边要判断登录是否成功，成功才签token
            //判断是否登录成功
            Admin adminInDb=adminService.findByEmail(admin.getEmail());

            //从数据库中找到这个相同的
            if (adminInDb==null){
                //如果找不到相同的就是错了
                log.info("邮箱不存在");
                return Result.error();
            }
            //能走这里说明，上面找到了一个非空的adminInDb
            //接下来就要比较密码，adminInDb带的密码是密文
            //所以要把参数admin中的密码转成密文才能比较
            String s= SecureUtil.md5(admin.getPassword());
            if (!s.equals(adminInDb.getPassword())){
                //密码错误
                log.info("密码错误");
                return Result.error();
            }

            //使用糊涂工具的语句
            String token= JWT.create().
                    //荷载不允许放敏感信息
                            //加装的东西就是载荷 开始载荷
                    setPayload("admin","管理员id")
                    //可选
                    .setPayload("role","管理员的角色")
                    //可选
                    .setPayload("name","管理员名称")
                    //载荷结束
                    //签名key不能给出去
                    .setKey("wjx123..".getBytes())
                    .sign();

            //把设置好的东西返回上去
            return Result.success(token);

            //完事这边可以去写一个测试类测试一下
        }
}
